Computing technology has advanced at a remarkable pace, with each subsequent generation of computing system increasing in performance, functionality, and storage capacity, often at reduced cost. However, despite these advances, many scientific and business applications still demand massive computing power, which can only be met by extremely high performance computing (HPC) systems. One particular type of computing system architecture that is often used in high performance applications is a parallel processing computing system.
Generally, a parallel processing computing system comprises a plurality of physical computing nodes and is configured with an HPC application environment, e.g., including a runtime environment that supports the execution of a parallel application across multiple physical computing nodes. Some parallel processing computing systems, which may also be referred to as massively parallel processing computing systems, may have hundreds or thousands of individual physical computing nodes, and provide supercomputer class performance. Each physical computing node is typically of relatively modest computing power and generally includes one or more processors and a set of dedicated memory devices, and is configured with an operating system instance (OSI), as well as components defining a software stack for the runtime environment. To execute a parallel application, a cluster is generally created consisting of physical computing nodes, and one or more parallel tasks are executed within an OSI in each physical computing node and using the runtime environment such that tasks may be executed in parallel across all physical computing nodes in the cluster.
Some production environments, as noted above, may number in the thousands of physical computing nodes. Parallel applications developed for such production environments, however, can be difficult to develop and test, as the performance of some features may be significantly dependent upon the size of the cluster, and as some issues may arise only at scale (i.e., when executed in a large-scale cluster). However, in many instances it is impractical, often for cost reasons, to maintain a representative cluster of this size just for development and/or testing purposes. When development and testing is performed in a smaller test environment, therefore, scale-dependent issues may not be thoroughly tested, leading to sub-optimal performance and/or errors when a parallel application is later installed in a production environment.
Therefore, a substantial need continues to exist in the art for a manner of developing and/or testing a parallel application intended for use in a large scale HPC application environment.